home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Games Collection 1 / software vault.zip / software vault / CDR10 / XLIB06.ZIP / XLIBTL02 / XTSRUTIL.ASM < prev    next >
Assembly Source File  |  1993-05-22  |  4KB  |  235 lines

  1. ; Some Mode 13h utility functions for XTSRTOOL - the TSR bitmap capture program
  2. ;------------------------------------------------------------------------------
  3. locals
  4. .model small
  5.  
  6. SCREEN_SEGMENT      equ 0a000h  ;where screen memory is
  7. GC_INDEX            equ 3ceh    ;Graphics Controller (GC) Index reg I/O port
  8. SET_RESET           equ 0       ;Set/Reset register index in GC
  9. G_MODE              equ 5       ;Graphics Mode register index in GC
  10. BIT_MASK            equ 8       ;Bit Mask register index in GC
  11. ENABLE_SET_RESET    equ 1
  12. BYTE_OFFSET_SHIFT   equ 3
  13. GC_ROTATE        equ    3
  14.  
  15. .data
  16.   global _width:word
  17.   global _height:word
  18.   global _m13h_rect:proc
  19.   global _get_13h_rect:proc
  20.   global _put_13h_rect:proc
  21.   global _get_video_mode:proc
  22.   global _get_line:proc
  23.  
  24. .code
  25. _get_video_mode proc near
  26.    push bp
  27.    mov  bp,sp
  28.    mov  ah,0fh
  29.    int  10h
  30.    xor  ah,ah
  31.    pop  bp
  32.    ret
  33. _get_video_mode endp
  34.  
  35.  
  36. ; draw a rectangle in mode 13h
  37. _m13h_rect proc near
  38. ARG x:word,y:word,color:word
  39.    push bp
  40.    mov  bp,sp
  41.    push di
  42.    push si
  43.    cld
  44.  
  45.    mov  ax,0A000h
  46.    mov  es,ax
  47.  
  48.    mov  si,_width
  49.  
  50.    mov  ax,320
  51.    mov  di,[x]
  52.    mov  bx,[y]
  53.    mul  bx
  54.    add  di,ax        ; di = offset of first pixel
  55.  
  56.    push di
  57.  
  58.    mov  al,byte ptr [color]
  59.    mov  cx,si
  60.    rep  stosb
  61.  
  62.    mov  ax,320
  63.    mov  di,[x]
  64.    add  bx,_height
  65.    dec  bx
  66.    mul  bx
  67.    add  di,ax        ; di = offset of first pixel
  68.  
  69.    mov  al,byte ptr [color]
  70.    mov  cx,si
  71.    rep  stosb
  72.  
  73.    ;======== Vertical lines =================
  74.  
  75.    pop  di
  76.    mov  bx,di
  77.  
  78.    mov  cx,_height
  79.    mov  ch,cl
  80.  
  81. @@loop1:
  82.    mov  es:[di],al
  83.    add  di,320
  84.    dec  cl
  85.    jnz @@loop1
  86.  
  87.    mov  di,si
  88.    dec  di
  89.    add  di,bx
  90.  
  91. @@loop2:
  92.    mov  es:[di],al
  93.    add  di,320
  94.    dec  ch
  95.    jnz @@loop2
  96.  
  97.    pop  si
  98.    pop  di
  99.    pop  bp
  100.    ret
  101. _m13h_rect endp
  102.  
  103. ; get a rectangle in mode 13h
  104. _get_13h_rect proc near
  105. ARG x:word,y:word,dest:word
  106. LOCAL w:word,h:word=stk
  107.    push bp
  108.    mov  bp,sp
  109.    sub  sp,stk
  110.    push ds
  111.    push di
  112.    push si
  113.  
  114.    mov  ax,_width
  115.    mov  [w],ax
  116.    mov  ax,_height
  117.    mov  [h],ax
  118.  
  119.    mov  ax,ds
  120.    mov  es,ax
  121.    mov  ax,0A000h
  122.    mov  ds,ax
  123.  
  124.    mov  di,[dest]
  125.    mov  al,byte ptr [w]
  126.    mov  ah,byte ptr [h]
  127.    stosw
  128.  
  129.    mov  ax,320
  130.    mov  bx,ax
  131.    sub  bx,[w]     ; dx = increnment to start of next line
  132.  
  133.    mov  si,[x]
  134.    mul  [y]
  135.    add  si,ax
  136.  
  137.  
  138. @@loop:
  139.    mov  cx,[w]
  140.    shr  cx,1
  141.    rep  movsw
  142.    adc  cx,0
  143.    rep  movsb
  144.    add  si,bx
  145.    dec  [h]
  146.    jnz  @@loop
  147.  
  148.    pop  si
  149.    pop  di
  150.    pop  ds
  151.    mov  sp,bp
  152.    pop  bp
  153.    ret
  154. _get_13h_rect endp
  155.  
  156.  
  157. ; put a rectangle in mode 13h
  158. _put_13h_rect proc near
  159. ARG x:word,y:word,src:word
  160. LOCAL h:word=stk
  161.    push bp
  162.    mov  bp,sp
  163.    sub  sp,stk
  164.    push ds
  165.    push di
  166.    push si
  167.  
  168.    mov  ax,_height
  169.    mov  [h],ax
  170.  
  171.    mov  ax,0A000h
  172.    mov  es,ax
  173.    mov  si,[src]
  174.    lodsw
  175.  
  176.    mov  ax,320
  177.    mov  bx,ax
  178.    sub  bx,_width     ; dx = increnment to start of next line
  179.  
  180.    mov  di,[x]
  181.    mul  [y]
  182.    add  di,ax
  183.  
  184. @@loop:
  185.    mov  cx,_width
  186.    shr  cx,1
  187.    rep  movsw
  188.    adc  cx,0
  189.    rep  movsb
  190.    add  di,bx
  191.    dec  [h]
  192.    jnz  @@loop
  193.  
  194.    pop  si
  195.    pop  di
  196.    pop  ds
  197.    mov  sp,bp
  198.    pop  bp
  199.    ret
  200. _put_13h_rect endp
  201.  
  202.  
  203. _get_line proc near
  204. ARG y:word,dest:word
  205. LOCAL w:word,h:word=stk
  206.    push bp
  207.    mov  bp,sp
  208.    push ds
  209.    push di
  210.    push si
  211.  
  212.    mov  ax,ds
  213.    mov  es,ax
  214.    mov  ax,0A000h
  215.    mov  ds,ax
  216.  
  217.    mov  di,[dest]
  218.  
  219.    mov  ax,320
  220.    mul  [y]
  221.    mov  si,ax
  222.  
  223.    mov  cx,160
  224.    rep  movsw
  225.  
  226.    pop  si
  227.    pop  di
  228.    pop  ds
  229.    pop  bp
  230.    ret
  231. _get_line endp
  232.  
  233.  
  234. end
  235.